package com.until;

import com.entity.Emp;
import com.service.IEmpService;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

import javax.annotation.Resource;

public class MyRealm extends AuthorizingRealm {
    @Resource
    private IEmpService empService;
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //获取到/staff/login方法中收集到的用户名
        String username=authenticationToken.getPrincipal().toString();
        Emp ep=new Emp();
        ep.setUsername(username);
        //调用服务层，根据用户名获取当前用户信息
        Emp emp = empService.getByUsername(ep);
        if(emp==null){
            //账号异常
            throw new AccountException();
        }
        //第一个参数  当前登录用户对象  在登录成功后，就可以取出放入session
        //第二个参数  加密密码  随机盐值+原始密码 hash 1024次后的密码
        //第三个参数  随机盐值 转换为ByteSource的对象
        //第四个参数 当前realm对象的名称

        // 把加密密码和盐值  交给SecurityManager 进行认证
        // 根据收集到密码和这里第三个参数的盐值，再根据spring-shiro-config中配置的加密算法及hash次数
        //再次进行加密运算  得到加密密码，和数据库获取到的第二个参数进行比对
        return new SimpleAuthenticationInfo(emp,
                emp.getPassword(),
                ByteSource.Util.bytes(emp.getSalt()),
                getName());
    }
}
